
<!DOCTYPE html>
<html>
  <head>
    <title>mapEntries</title>
    <link rel="stylesheet" href="prism.css">
    <link rel="stylesheet" href="style.css">
  </head>
  <body>
    <div id="header">
      <div class="doc-title"><a href="folktale.html"><span class="doc-title"><span class="product-name">Folktale</span><span class="version">v2.1.0</span></span></a><ul class="navigation"><li class="navigation-item"><a href="https://github.com/origamitower/folktale" title="">GitHub</a></li><li class="navigation-item"><a href="/docs/support/" title="">Support</a></li><li class="navigation-item"><a href="/docs/v2.1.0/contributing/" title="">Contributing</a></li></ul></div>
    </div>
    <div id="content-wrapper"><div id="content-panel"><h1 class="entity-title">mapEntries</h1><div class="highlight-summary"><div><p>Transforms own properties of an object using a mapping function.</p>
</div></div><div class="definition"><h2 class="section-title" id="signature">Signature</h2><div class="signature">mapEntries(object, transform, define)</div><div class="type-definition"><div class="type-definition-container"><div class="type-title-container"><strong class="type-title">Type</strong><a class="info" href="/docs/v2.1.0/misc/type-notation/">(what is this?)</a></div><pre class="type"><code class="language-haskell">(
  object    : Object 'a,
  transform : ((String, 'a)) =&gt; (String, 'b),
  define    : (('x : Object 'b), String, 'b) =&gt; Object 'b :: mutates 'x
) =&gt; Object 'b</code></pre></div></div></div><h2 class="section-title">Documentation</h2><div class="documentation"><div><p>Transforms own properties of an object using a mapping function.</p>
<p>The transformation takes a <code>[key, value]</code> pair, and is expected to return
a new <code>[key, value]</code> pair. The resulting object has not only its values
transformed, but also its keys.</p>
<h2 id="example-">Example:</h2>
<pre><code>const mapEntries = require(&#39;folktale/core/object/map-entries&#39;);

const pair = { x: 10, y: 20 };
mapEntries(
  pair,
  ([key, value]) =&gt; [key.toUpperCase(), value * 2],
  (result, key, value) =&gt; {
    result[key] = value;
    return result;
  }
);
// ==&gt; { X: 20, Y: 40 }
</code></pre><h2 id="handling-collisions">Handling collisions</h2>
<p>Since the mapping function returns a <code>[key, value]</code> pair, it&#39;s possible
that some of the returned keys collide with another. Since there&#39;s no
single answer that is correct for all cases when handling these collisions,
mapEntries expects an additional function that&#39;s used to define the 
properties in the resulting object, and this function is expected to
deal with the collisions.</p>
<p>A definition function takes the result object, a property name, and
a value, and is expected to return a new object containing the provided
key/value pair, if it can be attached to the result object. This function
may mutate the object, but pure functions are also supported.</p>
<p>Specialised forms of this function exist to cover common cases.
<code>mapEntries.overwrite</code> will have later key/value pairs overwrite earlier
ones with the same key, while <code>mapEntries.unique</code> will throw whenever
a collision happens.</p>
<h2 id="caveats">Caveats</h2>
<p><code>mapEntries</code> will not preserve the shape of the original object.
It treats objects as plain maps from String to some value. It ignores
things like prototypical delegation, symbols, and non-enumerable
properties.</p>
</div></div><div class="members"><h2 class="section-title" id="properties">Properties</h2><div class="member-category"><h3 class="category" id="cat-convenience">Convenience</h3><div class="member-list"><div class="member"><a class="member-name" href="folktale.core.object.map-entries.overwrite.html">overwrite(object, transform)</a><div class="doc-summary"><div><p>Transforms own properties of an object using a mapping function.</p>
</div></div><div class="special-tags"></div></div><div class="member"><a class="member-name" href="folktale.core.object.map-entries.unique.html">unique(object, transform)</a><div class="doc-summary"><div><p>Transforms own properties of an object using a mapping function.</p>
</div></div><div class="special-tags"></div></div></div></div></div><div class="source-code"><h2 class="section-title" id="source-code">Source Code</h2><div class="source-location">Defined in source/core/object/map-entries.js at line 25, column 0</div><pre class="source-code"><code class="language-javascript">(object, transform, define) =&gt;
        Object.keys(object).reduce((result, key) =&gt; {
          const [newKey, newValue] = transform([key, object[key]]);
          return define(result, newKey, newValue);
        }, {})</code></pre></div></div><div id="meta-panel"><div class="meta-section"><div class="meta-field"><strong class="meta-field-title">Stability</strong><div class="meta-field-value">stable</div></div><div class="meta-field"><strong class="meta-field-title">Licence</strong><div class="meta-field-value">MIT</div></div><div class="meta-field"><strong class="meta-field-title">Module</strong><div class="meta-field-value">folktale/core/object/map-entries</div></div></div><div class="table-of-contents"><div class="meta-section-title">On This Page</div><ul class="toc-list level-1"><li class="toc-item"><a href="#signature">Signature</a></li><li class="toc-item"><span class="no-anchor">Documentation</span><ul class="toc-list level-2"><li class="toc-item"><a href="#example-" title="Example:"><div><p>Example:</p>
</div></a></li><li class="toc-item"><a href="#handling-collisions" title="Handling collisions"><div><p>Handling collisions</p>
</div></a></li><li class="toc-item"><a href="#caveats" title="Caveats"><div><p>Caveats</p>
</div></a></li></ul></li><li class="toc-item"><a href="#properties">Properties</a><ul class="toc-list level-2"><li class="toc-item"><a href="#cat-convenience">Convenience</a></li></ul></li><li class="toc-item"><a href="#source-code">Source Code</a></li></ul></div><div class="meta-section"><strong class="meta-section-title">Authors</strong><div class="meta-field"><strong class="meta-field-title">Copyright</strong><div class="meta-field-value">(c) 2013-2017 Quildreen Motta, and CONTRIBUTORS</div></div><div class="meta-field"><strong class="meta-field-title">Authors</strong><div class="meta-field-value"><ul class="meta-list"><li>Quildreen Motta</li></ul></div></div><div class="meta-field"><strong class="meta-field-title">Maintainers</strong><div class="meta-field-value"><ul class="meta-list"><li>Quildreen Motta &lt;queen@robotlolita.me&gt; (http://robotlolita.me/)</li></ul></div></div></div></div></div>
    <script>
void function() {
  var xs = document.querySelectorAll('.documentation pre code');
  for (var i = 0; i < xs.length; ++i) {
    xs[i].className = 'language-javascript code-block';
  }
}()
    </script>
    <script src="prism.js"></script>
  </body>
</html>